package com.itheima.aop;

import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

/**
 * 研究通知的执行顺序
 * 多个切面类中多个切入点都匹配到了同一个目标方法。此时当目标方法在运行的时候，这多个切面类当中的这些通知方法都会运行
 * - 目标方法前的通知方法：字母排名靠前的先执行
 * - 目标方法后的通知方法：字母排名靠前的后执行
 *
 * 如果我们想控制通知的执行顺序有两种方式：
 * 1. 修改切面类的类名（这种方式非常繁琐、而且不便管理）
 * 2. 使用Spring提供的@Order注解
 * @Order(2)  //切面类的执行顺序（前置通知：数字越小先执行; 后置通知：数字越小越后执行）
 */
@Slf4j
@Component
//注释掉就没用了
//@Aspect
public class MyAspect4 {
    //前置通知
    @Before("execution(* com.itheima.service.*.*(..))")
    public void before(){
        log.info("MyAspect4 -> before ...");
    }

    //后置通知
    @After("execution(* com.itheima.service.*.*(..))")
    public void after(){
        log.info("MyAspect4 -> after ...");
    }
}
